package com.hmdp.utils;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import com.hmdp.dto.UserDTO;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import static com.hmdp.utils.RedisConstants.LOGIN_USER_KEY;

public class ResfreshtokenInteceptor implements HandlerInterceptor {
private StringRedisTemplate stringRedisTemplate;

public ResfreshtokenInteceptor(StringRedisTemplate stringRedisTemplate){
    this.stringRedisTemplate=stringRedisTemplate;
}

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1,获取请求头中token
      String token=  request.getHeader("authorization");
      if(StrUtil.isBlank(token)){

          return true;
      }
        //获取session
       // HttpSession session=request.getSession();
        //获取session用户
        //基于token获取redis中的用户
        String key=LOGIN_USER_KEY+token;
      Map<Object,Object>userMap= stringRedisTemplate.opsForHash().entries(LOGIN_USER_KEY+token);
      //  Object user = session.getAttribute("user");
        //判断用户是否存在
        if (userMap.isEmpty()) {

        return true;
        }
  //将查询到的Hash数据转为UsrDTO
        UserDTO userDTO = BeanUtil.fillBeanWithMap(userMap, new UserDTO(), false);
        //存在，保存用户信息到Threadlocal
        UserHolder.saveUser(userDTO);
        // UserHolder.saveUser((UserDTO)user);
        //刷新token有效期
stringRedisTemplate.expire(key,RedisConstants.LOCK_SHOP_TTL, TimeUnit.MINUTES);


        // 放行

return true;


    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}
